package com.tbit.main.service;


import com.tbit.main.pojo.AccountUser;
import com.tbit.main.pojo.Machine;
import com.tbit.main.pojo.MoveLog;
import com.tbit.main.pojo.MoveLogSta;

import java.util.List;
import java.util.Map;

/**
 * 挪车记录
 *
 * @author Leon
 * 2019年11月12日 下午4:45:49
 */
public interface MoveLogService {

    /**
     * 添加
     *
     * @param moveLog
     */
    public Integer insert(MoveLog moveLog);

    /**
     * 按时间分组统计
     *
     * @param agentId
     * @param userType
     * @param usermainId
     * @param isVaild
     * @param startTime
     * @param endTime
     * @return
     */
    public List<MoveLogSta> groupByTime(Integer agentId, Integer userType, Integer usermainId, Boolean isVaild,
                                        String startTime, String endTime, List<Integer> regionId, Integer machineType);

    /**
     * 根据时间查询
     *
     * @param accountId
     * @param userMainId
     * @param isVaild
     * @param startTime
     * @param endTime
     * @param userCode
     * @return
     */
    List<MoveLog> getByTime(Integer accountId, Integer userMainId, Boolean isVaild, String startTime, String endTime, String userCode, List<Integer> regionId, Integer machineType);

    /**
     * 根据id查询
     *
     * @param moveLogId
     * @return
     */
    MoveLog getById(Integer moveLogId);

    /**
     * 挪车
     *
     * @param accountUser
     * @param machineNO
     * @param parkPointId
     * @return
     */
    MoveLog move(AccountUser accountUser, String machineNO, Integer parkPointId, Double lon, Double lat, Integer mapType);

    /**
     * 结束挪车工单
     * @param accountUser
     * @param machine
     * @param moveLog
     */
    String endWork(AccountUser accountUser, Machine machine, MoveLog moveLog, Integer state);

    /**
     * 根据运营区域和时间统计综合
     *
     * @param accountId
     * @param isVaild
     * @param startTime
     * @param endTime
     * @return
     */
    public Integer groupByAccountIdTime(Integer accountId, Boolean isVaild, String startTime, String endTime);

    /**
     * 根据分区和时间统计综合
     *
     * @param regionId
     * @param isVaild
     * @param startTime
     * @param endTime
     * @return
     */
    public Integer groupByRegionIdTime(Integer regionId, Boolean isVaild, String startTime, String endTime);

    /**
     * 根据运营区域和时间分组
     *
     * @param accountId
     * @param statDate
     * @param endDate
     * @return
     */
    List<Map<String, Object>> getGroupByDay(Integer accountId, String statDate, String endDate);

    /**
     * 批量挪车
     *
     * @param accountUser
     * @param userCode
     * @param parkPointId
     * @return
     */
    void moveBatch(AccountUser accountUser, List<String> userCode, Integer parkPointId, Double lon, Double lat, Integer mapType) throws Exception;

    /**
     * 挪车上锁
     *
     * @param machine 车辆
     * @param remark  备注
     */
    void moveLock(Machine machine, String remark);

    /**
     * 根据ids查询
     *
     * @param moveLogIds
     * @return
     */
    List<MoveLog> getMoveLogIds(List<Integer> moveLogIds, Integer mapType);

    void delCache(String userCode);

    void batchDelCache(List<String> userCodes);

    void audit(Integer moveId, boolean isValid,String remark);
}
